Despues de hacer algunas comprobaciones resulta que el error no proviene directamente de la anotación SpringBootTest, el problema se produce al usar esa anotación con la siguiente dependencia:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Está dependencía permite autoconfigurar el EntityManager y tambien es la que hace la autoconfiguración de datasource asi que al usarla en conjunto con la anotación de SpringBootTest hace que se produzca el intento de conexión con la base de datos
Para resolverlo se puede usar la solución que se explica abajo en está página usando el ExtendWith, pero tambien podemos utilizar una configuración alternativa con la etiqueta SpringBootTest de la siguiente manera:
Primero en el application.properties de los tests indicamos la siguiente linea de configuración
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
A continuación en la etiqueta SpringBootTest indicamos con la opcion classes las clases que necesita el test para poder ser compilado, de igual manera que se hace la configuración con el ExtendWith (las clases dependientes son las mismas en los dos casos):
Al lanzar los tests unitarios se intenta hacer una conexion con la base de datos, lo cual no debería de ocurrir en test unitarios
2022-02-20 17:01:31.819 WARN 13520 --- [ main] o.s.w.c.s.GenericWebApplicationContext : Exception encountered during
context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean
with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration': Unsatisfied dependency expressed through constructor
parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined
in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory
method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate
[com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is
org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
2022-02-20 17:01:31.834 INFO 13520 --- [ main] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2022-02-20 17:01:31.869 ERROR 13520 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
Action:
Consider the following:
If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).
El Application context que ejecuta los test intenta configurar un dataSource (en este caso una conexion a la base de datos) y falla al no encontrar ninguna configuración valida, en este caso como estamos probando test unitarios ni siquiera se debería de producir ese intento de conexión.
Esta situación se produce porque estamos utilizando la etiqueta @SpringBootTest para la configuración de los test, está etiqueta debería de utilizarse para test de integración en los que si se tiene que utilizar una base de datos, pero no para test unitarios
La anotación que tenemos que utilizar es @ExtendWith(SpringExtension.class), y a mayores tenemos que configurar el test para que cargue las clases de las que tiene dependencias, esto lo hacemos dentro del test con la etiqueta @Configuration, y despues con la etiqueta @Bean para cargar las clases, el código solucionado quedaría así:
Para saber cuales son las clases que tenemos que añadir en la configuración podemos verlo al ejecutar los tests y observar el fallo que se nos muestra:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name
'main.services.memberProfileServiceTests.DeleteMemberTests': Unsatisfied dependency expressed through field 'memberProfileService'; nested
exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'main.services.MemberProfileService'
available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
No qualifying bean of type 'main.services.MemberProfileService' available
Spring | test | Base de datos | datasource | app context